home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xshisen-.001 / xshisen-~ / xshisen-1.35 / components.h < prev    next >
C/C++ Source or Header  |  1996-01-22  |  7KB  |  278 lines

  1. #ifdef HAVE_CONFIG_H
  2. # include "config.h"
  3. #endif
  4. #if HAVE_LIBXM
  5. # include <Xm/RowColumn.h>
  6. # include <Xm/CascadeBG.h>
  7. # include <Xm/PushBG.h>
  8. # include <Xm/ToggleBG.h>
  9. # include <Xm/Form.h>
  10. # include <Xm/DrawingA.h>
  11. # include <Xm/Label.h>
  12. # include <Xm/LabelG.h>
  13. # include <Xm/MessageB.h>
  14. # define USE_MOTIF 1
  15. # undef  USE_ATHENA
  16. # if HAVE_LIBXMU
  17. #  define USE_EDITRES
  18. # endif
  19. #else /* HAVE_LIBXM */
  20. # include <X11/Xlib.h>
  21. # include <X11/Intrinsic.h>
  22. # include <X11/StringDefs.h>
  23. # include <X11/Xaw/XawInit.h>
  24. # include <X11/Xaw/Form.h>
  25. # include <X11/Xaw/Box.h>
  26. # include <X11/Xaw/MenuButton.h>
  27. # include <X11/Xaw/SimpleMenu.h>
  28. # include <X11/Xaw/SmeBSB.h>
  29. # include <X11/Xaw/SmeLine.h>
  30. # include <X11/Xaw/Toggle.h>
  31. # define USE_ATHENA 1
  32. # undef  USE_MOTIF
  33. #endif /* HAVE_LIBXM */
  34. #include <X11/xpm.h>
  35. #include <X11/cursorfont.h>
  36. #if STDC_HEADERS
  37. # include <stdlib.h>
  38. # include <string.h>
  39. #endif
  40. #if TIME_WITH_SYS_TIME
  41. # include <sys/time.h>
  42. # include <time.h>
  43. #elif HAVE_SYS_TIME_H
  44. # include <sys/time.h>
  45. #else
  46. # include <time.h>
  47. #endif
  48. #if HAVE_UNISTD_H
  49. # include <unistd.h>
  50. #endif
  51. #if HAVE_LIMITS_H
  52. # include <limits.h>
  53. #endif
  54. #include <stdio.h>
  55. #ifndef HAVE_GETTIMEOFDAY
  56.   Cannot compile this program on the system which does not have
  57.   gettimeofday() function
  58. #endif
  59.  
  60. #define PKIND 36             // Total kind of pieces
  61. #define HNUM  (PKIND*2)      // Number of pairs to pick up
  62. #define SCORENUM  10         // Number of people to register in high-score
  63. #define NAMELEN   28         // Length of name in high-score
  64.  
  65. class Timer {
  66. private:
  67.   struct timeval initialtime;
  68.   long timeoffset;
  69. protected:
  70.   long currenttime;
  71. public:
  72.   void ResetTimer(void);
  73.   long GetTimer(void);  // in mili-second
  74.   void SetTimer(long);  // in mili-second
  75. };
  76.  
  77. class TimerW : public Timer {
  78. private:
  79.     Widget label[4];
  80. #if USE_MOTIF
  81.     XmString str1;
  82. #else
  83.     String str1;
  84. #endif
  85.     int    countNow;
  86.     int    dateMode;
  87. public:
  88.     TimerW(Widget, Widget, char*, char*, char*, char*);
  89.     void DisplayTimer(int);
  90.     void DisplayCurrentTime(void);
  91.     operator Widget(){ return label[0]; }
  92. };
  93.  
  94. class Mahjong {
  95. private:
  96.     Pixmap data;
  97.     Pixmap datag;
  98.     Pixmap rdata;
  99.     Pixmap rdatag;
  100.     unsigned int original_width;
  101.     unsigned int original_height;
  102.     unsigned int width;
  103.     unsigned int height;
  104.     int resized;
  105. public:
  106.     short  id;
  107.     Mahjong(void);
  108.     void ReadFile(Widget, char*, int, int);
  109.     void Resize(Widget, GC, unsigned int, unsigned int);
  110.     void GetSize(unsigned int&, unsigned int&);
  111.     void Draw(Widget, GC, int, int, int);
  112.     operator Pixmap() { return data; }
  113. };
  114.  
  115. class Point {
  116. public:
  117.     short x;
  118.     short y;
  119.     Point(const Point &p) { x=p.x; y=p.y; }
  120.     Point(short p1=0, short p2=0) { x=p1; y=p2; }
  121.     friend int operator == (const Point &a, const Point &b) {
  122.         return a.x==b.x && a.y==b.y;
  123.     }
  124. };
  125.  
  126. class PiePos {
  127. private:
  128.     int   count;
  129.     Point *p;
  130. public:
  131.     PiePos(int num){ count = 0; p = new Point[num]; }
  132.     ~PiePos(void){ delete[] p; }
  133.     void Clear(void){ count = 0; }
  134.     void Add(const Point &q){
  135.         p[count++] = q;
  136. #if DEBUG > 1
  137.         fprintf(stderr, "P:add (%d,%d) [%d]\n", q.x, q.y, count);
  138. #endif
  139.     }
  140.     void Delete(const Point&, const Point&);
  141.     void Move(const Point&, const Point&);
  142.     void GetPosArray(Point poi[], int &num){
  143.         for(int i=0; i<count; i++)
  144.             poi[i] = p[i];
  145.         num = count;
  146.     }
  147. };
  148.  
  149. class History {
  150. private:
  151.     int count;
  152.     Point *piece1;
  153.     Point *piece2;
  154.     Point *via1;
  155.     Point *via2;
  156. public:
  157.     History(int);
  158.     ~History(void);
  159.     void ChangeHistorySize(int);
  160.     void AddHistory(const Point&, const Point&, const Point&, const Point&);
  161.     int  BackHistory(void);
  162.     void GetXY(int, Point&, Point&);
  163.     void GetV(int, Point&, Point&);
  164.     void ResetHistory(void);
  165. };
  166.  
  167. class MenuBar {
  168. private:
  169.     Widget menubar;
  170.     Widget title[3];
  171.     int    restart_disabled;
  172.     Pixmap check; /* unused with Motif */
  173. public:
  174.     MenuBar(Widget, int, int);
  175.     void DisableRestart(void);
  176.     void Sensitive(void);
  177.     void Insensitive(void);
  178.     void PauseOn(void);
  179.     void PauseOff(void);
  180.     void ClickTrial(Boolean, Boolean);
  181.     void DemoMode(void);
  182.     operator Widget(){ return menubar; }
  183.     void CheckRadio(int);
  184. };
  185.  
  186. class ScoreRecord {
  187. public:
  188.     char name[NAMELEN*2+1];
  189.     unsigned char hour;
  190.     unsigned char min;
  191.     unsigned char sec;
  192.     char date[9];
  193.     char time[9];
  194.     void SetDefault(void);
  195.     void ReadField(FILE*, int, int&);
  196.     void WriteField(FILE*, int, int&, int=0);
  197. };
  198.  
  199. class Score {
  200. private:
  201.     Widget score;
  202.     Widget mdialog;
  203.     int  first_call;
  204.     String res_strings[16];
  205.     int  mdialog_exist;
  206.     char *filename; /* File to store the global best score */
  207.     char *logfile;  /* File to log the personal records */
  208.     int  kanjiCode;
  209.     long scoreToRegister; /* time in second */
  210.     int  game;            /* Game size */
  211.     ScoreRecord rec[SCORENUM];
  212.     void readfile(void);
  213.     int  writefile(void);
  214.     void problem(void);
  215.     static XtResource resources[16];
  216.     static void retry_button(Widget, XtPointer);
  217.     static void abandon_button(Widget, XtPointer);
  218.     static void ms_to_hms(int, unsigned char&, unsigned char&, unsigned char&);
  219.     void do_first_call(void);
  220.     char *makeStatistics(const char*, int[], int[], int[]);
  221.     int atoiSubstring(const char*, int);
  222. public:
  223.     Score(Widget);
  224.     void SetScoreFile(const char*, const char*, const char*);
  225.     void DisplayScore(int);
  226.     void Popup(String);
  227.     void Register(void);
  228.     void SetScore(long value, int g) {
  229.         scoreToRegister = value;
  230.         game = g;
  231.     }
  232.     void LogRecord(int, int, int, int, int);
  233.     int  PersonalStat(int);
  234.     operator Widget(){ return score; }
  235. };
  236.  
  237. void ExposeCB(Widget, XtPointer, XtPointer);
  238. void InitGlobalMahjong(Widget, const char *);
  239. void GameCB(Widget, int);
  240. void SuppCB(Widget, int);
  241. void ChangeGameCB(Widget, int, XtPointer);
  242. void PopDownCB(Widget, XtPointer);
  243. void Message(Pixmap, const char*, int = 0,
  244.              XtTimerCallbackProc = NULL, XtCallbackProc = NULL);
  245. Pixmap ResizePixmap(Pixmap, GC, unsigned int, unsigned int);
  246. Pixmap MakeHalfBrightPixmap(Pixmap, GC);
  247.  
  248. extern Widget  toplevel;
  249. extern XtAppContext app_context;
  250.  
  251. #ifndef HAVE_STRDUP
  252. extern char *strdup(const char *s);
  253. #endif /* HAVE_STRDUP */
  254.  
  255. #ifndef HAVE_STRSTR
  256. extern char *strstr(const char *s1, const char *s2);
  257. #endif /* HAVE_STRSTR */
  258.  
  259. #ifndef HAVE_STRNCASECMP
  260. extern int strncasecmp(const char *s1, const char *s2, size_t n);
  261. #endif /* HAVE_STRNCASECMP */
  262.  
  263. #ifndef HAVE_STRCASECMP
  264. extern int strcasecmp(const char *s1, const char *s2);
  265. #endif /* HAVE_STRCASECMP */
  266.  
  267. #ifndef KANJICODE
  268. # define KANJICODE "jis"
  269. #endif
  270.  
  271. #if HAVE_DRAND48
  272. /* SunOS 4 does not have drand48 prototypes ... */
  273. extern "C" {
  274.     double drand48(void);
  275.     void srand48(long);
  276. }
  277. #endif
  278.